#include<stdio.h>

int n, m;
int c0, c1, c2;

struct Node {
	int x;
	int y;
	char type;
} node[1005];

int main() {
	scanf("%d%d", &n, &m);
	for(int i=0; i<n; i++) {
		scanf("%d%d%s", &node[i].x, &node[i].y, node[i].type);
	}

	for(int i=0; i<m; i++) {
		scanf("%d%d%d", &c0, &c1, &c2);
		// 判断能否二分类
		int succ=1;
		int flagA=-1, flagB=-1;
		for(int j=0; j<n; j++) {
			int t = (c0+c1*node[j].x+c2*node[j].y>0) ? 1 : 0 ;
			
			if(node[j].type=='A') {
			    if(flagA==-1)
				    flagA=t; // 初始化在一侧
				else if(flagA!=t){ // 出现在另一侧
					succ=0; break;
				}
			} 
			
			else if(node[j].type=='B'){
				if(flagB==-1)
				    flagB=t;
				else if(flagB!=t){
					succ=0; break;
				}
			} 
			
			if(flagA==flagB) { // A类和B类不能在同一侧 
				succ=0; break;
			} 
		}
		
		printf("%s\n", succ?"Yes":"No"); 
	}
	
	return 0;
}
